package org.example.nio.sendreceiver;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

/**
 * @author hh
 * @since 2024/10/19
 */
public class NioSendClient {
    public static void main(String[] args) throws IOException {
        startClient();
    }

    private static void startClient() throws IOException {
        InetSocketAddress address = new InetSocketAddress("127.0.0.1", 9999);
        // 获取通道
        SocketChannel socketChannel = SocketChannel.open(address);
        // 切换成非阻塞模式
        socketChannel.configureBlocking(false);
        // 不断的自旋，等待连接完成，或者做一些其他的事情
        while (!socketChannel.finishConnect()) {

        }
        System.out.println("客户端连接成功");
        // 分配指定大小的缓冲区
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        byteBuffer.put("我是文件名".getBytes());
        // 变成读模式
        byteBuffer.flip();
        // 发送到服务器
        socketChannel.write(byteBuffer);
        System.out.println("文件名发送完成...");
        // 变成写模式
        byteBuffer.clear();
        byteBuffer.put("hello world".getBytes());
        // 变成读模式
        byteBuffer.flip();
        socketChannel.write(byteBuffer);
        System.out.println("文件内容发送完成...");
        byteBuffer.clear();
        socketChannel.shutdownOutput();
        socketChannel.close();
    }
}
